package com.dunjx.rabbitMq.simple;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeoutException;

public class Producer {

    public static void main(String[] args) {
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setPort(5672);
        connectionFactory.setUsername("admin");
        connectionFactory.setPassword("admin");
        connectionFactory.setHost("39.103.219.84");
        connectionFactory.setVirtualHost("/djx");


        Connection connection = null; // 连接

        Channel channel = null; // 通道

        try {
            connection = connectionFactory.newConnection("Simple_Provider");

            channel = connection.createChannel();
            String queue = "queue06";

            /*
             * 队列声明 ：
             * @params 1 队列的名称
             * @params 2 是否要持久化 durable = false 所谓的持久化就是消息是否存入磁盘 true 是 持久化
             * @params 3 排他性 是否是独立独占
             * @params 4 是否自动删除  最后一个消费者消费完消息之后 是否把队列删除
             * @params 5 携带一些附属参数
             */
            channel.queueDeclare(queue, true, false, false, null);

            String message = "憨憨 你想见我嘛？";

            String  exchangeName = "fanout-exchenage";
            String type = "fanout";
            String routeKey = "";
            /*
             * @params1 交换机  虽然没有指定交换机 但是一定会存在一个默认的交换机
             * @params2 队列 路由Key
             * @params3 消息的状态控制
             * @params4 消息主体
             */
            channel.basicPublish(exchangeName, routeKey, null, message.getBytes(StandardCharsets.UTF_8));
            System.out.println("消息发送成功！");
        } catch (Exception e) {
            e.printStackTrace();

        } finally {
            if (channel != null&&channel.isOpen()) {
                try {
                    channel.close();
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (TimeoutException e) {
                    e.printStackTrace();
                }

            }

            if (connection!=null && connection.isOpen()){
                try {
                    connection.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}
